package generics;

import java.util.ArrayList;
import java.util.List;

public class GenericCasting {
    public static void main(String[] args) {
        List<String> strList = new ArrayList<>();
        strList.add("Hello");

        // 错误的转型：编译不通过
        // List<Object> objList = (List<Object>) strList; // 编译错误

        // 正确方式1：使用通配符（? extends Object等价于?）
        List<?> wildcardList = strList; // 合法，无界通配符
        Object obj = wildcardList.get(0); // 正确

        // 正确方式2：使用上界通配符
        List<? extends Object> upperList = strList; // 合法
        Object obj2 = upperList.get(0); // 正确

        // 泛型数组的限制：不能创建具体泛型类型的数组
        // List<String>[] strLists = new List<String>[10]; // 编译错误
        List<?>[] wildcardArrays = new List<?>[10]; // 合法
        wildcardArrays[0] = new ArrayList<String>();
        wildcardArrays[1] = new ArrayList<Integer>();
    }
}
